package com.lx.chong.service;

import com.lx.chong.dto.PageAndSortDto;
import com.lx.chong.utils.pageable.MyQuery;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.util.List;
import java.util.Map;

/**
 * @author: whh
 * @date: 2017/12/18
 */
public interface BaseService {
    /**
     * 通用可排序附带查询的分页
     *
     * @param pageable   分页排序信息
     * @param queries    查询条件集合
     * @param repository 操作源
     * @return Page封装对象
     */
    Page getPageInfoFromParams(PageRequest pageable, List<MyQuery> queries, JpaSpecificationExecutor repository);
    List getListInfoFromParams(List<MyQuery> queries, JpaSpecificationExecutor repository);
    /**
     * 对象判重
     *
     * @param entityName 实体类名称
     * @param para       参数集合
     * @param id         对象id
     * @param flag       是否有ifDelete字段
     * @return true 不重复 false 重复
     */
    boolean checkRepeat(String entityName, Map<String, Object> para, Object id, boolean... flag);

    /**
     * 判重，只查当前单位下不能存在重复的
     * */
    boolean checkRepeat(String entityName, Map<String, Object> para, Object id, Long orgId, String fieldName, boolean... flag);

    /**
     * 由分页排序查询DTO对象,直接返回page对象通用方法
     *
     * @param dto
     * @param repository
     * @param <T>
     * @return
     * @throws Exception
     */
    <T> Page<T> getPageAndSortThis(PageAndSortDto dto, JpaSpecificationExecutor repository) throws Exception;
}
